//
//  JCRatioSizeUtil.swift
//  JCPublicKit
//
//  Created by JasonLee on 2020/5/12.
//

import Foundation

/**
 等比例换算工具
 */
class JCRatioSizeUtil: NSObject {
    /**
     设计图画布尺寸
     即设计图是依照什么屏幕尺寸进行设计的值
     默认为iPhone 6屏幕尺寸，375 * 667
     */
    fileprivate static var DESIGNED_FRAME_SIZE: CGSize {
        CGSize(width: 375, height: 667)
    }
    
    /**
     计算转换后的尺寸
     */
    @objc static func sizeFrom(_ size: CGSize) -> CGSize {
        // 计算当前宽度缩放比例，414 / 375 = 1.104
        let scale = UIScreen.main.bounds.width / DESIGNED_FRAME_SIZE.width
        // 缩放后的宽度，10 * 1.104 = 11.04
        let scaledWidth = DESIGNED_FRAME_SIZE.width * scale
        // 计算当前尺寸的比例，1 / 10 = 0.1
        let viewScale = DESIGNED_FRAME_SIZE.height / DESIGNED_FRAME_SIZE.width
        // 缩放后的高度，11.04 * 0.1 = 1.104
        let scaledHeight = scaledWidth * viewScale
        // 返回缩放后的尺寸，CGSize(11.04, 1.104)
        return CGSize(width: scaledWidth, height: scaledHeight)
    }
    /**
     计算转换后的尺寸
     */
    @objc static func size(fromWidth width: CGFloat, height: CGFloat) -> CGSize {
        return sizeFrom(CGSize(width: width, height: height))
    }
    /**
     单独计算宽度
     默认按height = 1进行计算
     */
    @objc static func width(fromWidth width: CGFloat) -> CGFloat {
        return size(fromWidth: width, height: 1).width
    }
    /**
     单独计算高度
     默认按width = 1进行计算
     */
    @objc static func height(fromHeight height: CGFloat) -> CGFloat {
        return size(fromWidth: 1, height: height).height
    }
}

// MARK: - 拓展方法
extension CGSize {
    /**
     返回一个等比例换换后的尺寸
     */
    var jc_ratio: CGSize {
        return JCRatioSizeUtil.sizeFrom(self)
    }
    /**
     自身进行比例换算
     */
    mutating func jc_selfRatio() {
        self = JCRatioSizeUtil.sizeFrom(self)
    }
}
extension CGFloat {
    /**
     返回一个等比例转换后的尺寸，自身作为width进行计算
     */
    var jc_ratioWidth: CGFloat {
        return JCRatioSizeUtil.size(fromWidth: self, height: 1).width
    }
    /**
     返回一个等比例转换后的尺寸，自身作为height进行计算
     */
    var jc_ratioHeight: CGFloat {
        return JCRatioSizeUtil.size(fromWidth: 1, height: self).height
    }
}
